package gdr.window.online.client;

import gdr.window.*;
import gdr.dev.*;
import gdr.connection.*;
import gdr.window.menu.*;
import gdr.battle.core.*;
import gdr.battle.core.online.ClientManager;

import com.golden.gamedev.object.Timer;

public class OnlineClient extends BaseWindow{
	public static final int LARGHEZZA_COLONNA_SINISTRA = 170;
	public static final int MARGIN_TOP = 20;
	public static final int MARGIN_LEFT = 20;
	public static final int MARGIN_RIGHT = 30;
	public static final int MARGIN_BOTTOM = 10;
	public static final int INTER_MARGIN_TOP = 10;
	public static final int INTER_MARGIN_LEFT = 20;
	public static final int ALTEZZA_STATO_SERVER = 170;
	
	protected ClientManager client;
	protected Menu statoServer;
	protected Menu utentiConnessi;
	protected Menu battaglieDisponibili;
	
	public OnlineClient(SuperGDR9000 gdr){
		super(gdr);
		Client c = new Client("localhost", 20000);
		c.start();
		client = new ClientManager();
		client.setClient(c);
		c.setManager(client);

		super.setVisible(true);
		super.setFocused(true);
		super.setNeedRefresh(true);
		
		super.setDefaultIsFocused(true);
		super.setDefaultIsVisible(true);
		super.setDefaultNeedRefresh(true);
	}
	
	public void startClient(){
		statoServer = new Menu(gdr){
			protected void updateWindow(long elapsedTime){
				
				addMenuOption(new Opzione(IPGetter.ip(),false,true), 1, 1);
			}
		};
		super.addChild(statoServer);
		statoServer.setVisible(true);
		statoServer.setNeedRefresh(true);
		statoServer.setFocused(false);
		statoServer.setWidth(LARGHEZZA_COLONNA_SINISTRA);
		statoServer.setHeight(ALTEZZA_STATO_SERVER);
		statoServer.setX(MARGIN_LEFT);
		statoServer.setY(MARGIN_TOP);
		statoServer.setAdattaAltezza(false);
		statoServer.setAdattaLarghezza(false);
		int row = 0;
		statoServer.addMenuOption(new Opzione("Server", false, true), row, 0);
		row++;
		statoServer.addMenuOption(new Opzione("IP Server", false, true), row, 0);
		statoServer.addMenuOption(new Opzione("", false, true), row, 1);
		row++;
		statoServer.addMenuOption(new Opzione("Porta", false, true), row, 0);
		statoServer.addMenuOption(new Opzione("", false, true), row, 1);
		row++;
		statoServer.addMenuOption(new Opzione("Stato", false, true), row, 0);
		statoServer.addMenuOption(new Opzione("", false, true), row, 1);
		
		utentiConnessi = new Menu(gdr){
			Timer t = new Timer(1000);
			protected void updateWindow(long elapsedTime){
				if (t.action(1000))
					addMenuOption(new Opzione(IPGetter.ip(),false,true), 1, 1);
			}
		};
		utentiConnessi.setTitle("Utenti connessi");
		super.addChild(utentiConnessi);
		utentiConnessi.setVisible(true);
		utentiConnessi.setNeedRefresh(true);
		utentiConnessi.setFocused(false);
		utentiConnessi.setWidth(LARGHEZZA_COLONNA_SINISTRA);
		utentiConnessi.setHeight(ALTEZZA_STATO_SERVER);
		utentiConnessi.setX(MARGIN_LEFT);
		utentiConnessi.setY(MARGIN_TOP + ALTEZZA_STATO_SERVER + INTER_MARGIN_TOP);
		utentiConnessi.setAdattaAltezza(false);
		utentiConnessi.setAdattaLarghezza(false);
		
		battaglieDisponibili = new Menu(gdr){
			protected void updateWindow(long elapsedTime){
			}
		};
		battaglieDisponibili.setTitle("Utenti connessi");
		//super.addChild(battaglieDisponibili);
		battaglieDisponibili.setVisible(true);
		battaglieDisponibili.setNeedRefresh(true);
		battaglieDisponibili.setFocused(true);
		battaglieDisponibili.setX(MARGIN_LEFT+LARGHEZZA_COLONNA_SINISTRA + INTER_MARGIN_LEFT);
		battaglieDisponibili.setY(MARGIN_TOP);
		battaglieDisponibili.setWidth(gdr.getWidth() - battaglieDisponibili.getX() - MARGIN_RIGHT);
		battaglieDisponibili.setHeight(gdr.getHeight()- MARGIN_TOP - MARGIN_BOTTOM);
		battaglieDisponibili.setAdattaAltezza(false);
		battaglieDisponibili.setAdattaLarghezza(false);
		battaglieDisponibili.setMostra_tutte_le_righe(false);
		battaglieDisponibili.setRighe_da_visualizzare(battaglieDisponibili.getHeight()/battaglieDisponibili.getRow_span());
		for (int i=0; i<20; i++)
			battaglieDisponibili.addMenuOption(new Opzione("Aa_"+i), i, 0);
		
	}
	
	public void activate(){
		statoServer.setWindowVisibility(true, true, false);
		super.setWindowVisibility(true, true, false);
		utentiConnessi.setWindowVisibility(true, true, false);
	}
}